package tt.dz.order.dao;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Repository;

/**
 * 自动加载application
 * @summary 通过spring管理的初始化当前的application整理 *
 */
@Repository
@Order(value=Ordered.HIGHEST_PRECEDENCE)
public class SysApplicationContextAware implements ApplicationContextAware {

	private static ApplicationContext APPLICATION;

	@Override
	public void setApplicationContext(ApplicationContext application) throws BeansException {
		SysApplicationContextAware.APPLICATION = application;
	}

	/**
	 * 获取application
	 * 
	 * @author Anson
	 * @see ApplicationContextAware#setApplicationContext(ApplicationContext)
	 * @createDate 2016年4月27日
	 * @desc 依托于spring的管理加载
	 * @return ApplicationContext
	 */
	public static final ApplicationContext getApplication() {
		return SysApplicationContextAware.APPLICATION;
	}

	/**
	 * 得到当前定义的bean
	 * 
	 * @author Anson
	 * @createDate 2016年4月27日
	 * @desc 通过类别来获取spring管理的bean
	 * 
	 * @param clazz
	 *            将要获取的bean类别
	 * @return 返回实例化的bean
	 */
	public static <T> T getBean(Class<T> clazz) {
		return APPLICATION.getBean(clazz);
	}

	/**
	 * 得到当前定义的bean
	 * 
	 * @author Anson
	 * @createDate 2016年4月27日
	 * @desc 通过别名来获取spring管理的bean
	 * @param beanIdentifiedName
	 *            定义的spring管理的bean
	 * @return 返回实例化的bean
	 */
	public static Object getBean(String beanIdentifiedName) {
		return APPLICATION.getBean(beanIdentifiedName);
	}

}
